package com.bailong.aop.demo03;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class CGLibProxy implements MethodInterceptor {
    private Object factory=null;

    public Object createProxy(Object factory){
        this.factory = factory;
        Enhancer enhancer = new Enhancer();
        //设置父类型
        enhancer.setSuperclass(factory.getClass());
        //设置方法的回调,调用代理者对象方法时，会调用当前对象的intercepter;
        enhancer.setCallback(this);
        //创建代理对象返回
        return enhancer.create();
    }



    /**
     * 拦截方法
     * @param o 被代理对象
     * @param method 被代理对象需要调用的方法
     * @param objects 方法的参数
     * @param methodProxy 方法的代理
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("使用CGLIB推销产品");
        //使用方法的代理，调用父类的方法
        methodProxy.invokeSuper(o,objects);

        System.out.println("使用CGLIB代理来进行售后");
        return null;
    }
}
